package juanca.mole;

import java.math.BigDecimal;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import ClasesExtras.GetIpAddress;
import ClasesExtras.ManejadorCampos;
import ClasesExtras.ValidacionCampos;
import ClasesExtras.handlerAlertMessage;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

import com.savagelook.android.JsonHelper;

public class RecepcionMp extends Activity {

	private int fAno;
	private int fMes;
	private int fDia;
	private int hMinuto;
	private int hHora;
	private String pesoTotal;
	private String pesoNeto;
	private String numCanastilla;
	private boolean SALIR;
	private boolean estadoMp;
	private boolean residuosQuimicos;
	private String proveedores;
	private String materiaPrima;
	private String refCanastillas;
	private String noLoteReMp;
	private String estadoPqNo;
	private String numFactura;
	private String tipoEmpaque;
	private String otroTipoEmpaq;
	private String obsResiduosQuimicos;
	private String obsRecepcionMp;
	private String idOperarioEmpleado;
	private String idEmpleado;
	private String passwEmpleado;
	private String nivelMaduracion;
	private String fechaUsuario;
	private String tiempoUsuario;
	private String fechaSistema;
	private String tiempoSistema;
	private String time;
	private String date;
	public Date fecha;
	public Time hora;
	public CharSequence pesocalculado;
	public CharSequence pesocalculadoKg;
	SimpleDateFormat formatoFecha;
	SimpleDateFormat formatoTiempo;
	public ProgressDialog progressDialog;

	public ValidacionCampos validarcampos = new ValidacionCampos();
	public HashMap<String, Integer> proveedoresId;
	public HashMap<String, Integer> MpId;
	public static final int DATE_DIALOG_ID = 0;
	public static final int TIME_DIALOG_ID = 1;
	public static final double REF_CANASTILLA1 = 1780;
	public static final double REF_CANASTILLA2 = 1200;
	public static final double REF_CANASTILLA3 = 0;
	public static final String STRING_EMPTY = "";
	private String URL_PROVEEDORES;
	private String URL_MATERIAS_PRIMAS;
	private String URL_RECEPCION_MP;
	private String URL_VALIDAR_USUARIO;
	private static final String CNV = "cnv";
	private static final String PNV = "pnv";
	private static final String no_permiso = "no_permiso";
	private RecepcionMp self = this;

	private EditText etNoFactura;
	private EditText etJustPqNo;
	private EditText etPesoMP;
	private EditText etNumCanastillas;
	private EditText etEmpaqOtro;
	private EditText etCualesResiduos;
	private EditText etNoLoteReMp;
	private EditText etObsRegMP;
	private TextView tvrResultado;
	private TextView tvrResultadoKg;
	private RadioButton rbEstadoSi;
	private RadioButton rbEstadoNo;
	private RadioButton rbEmpaqCanastilla;
	private RadioButton rbEmpaqEstopa;
	private RadioButton rbEmpaqOtro;
	private RadioButton rbNivel1;
	private RadioButton rbNivel2;
	private RadioButton rbNivel3;
	private RadioButton rbNivel4;
	private RadioButton rbResiduosSi;
	private RadioButton rbResiduosNo;
	private Spinner spiRefCanastilla;
	private Spinner spiMP;
	private Spinner spiProveedor;
	private ManejadorCampos manejador;
	private handlerAlertMessage manejadorMensajes;
	private Activity activity;

	/**
	 * @return the sALIR
	 */
	public boolean isSALIR() {
		return SALIR;
	}

	/**
	 * @param sALIR
	 *            the sALIR to set
	 */
	public void setSALIR(boolean sALIR) {
		SALIR = sALIR;
	}

	/**
	 * @return the idOperarioEmpleado
	 */
	public String getIdOperarioEmpleado() {
		return idOperarioEmpleado;
	}

	/**
	 * @param idOperarioEmpleado
	 *            the idOperarioEmpleado to set
	 */
	public void setIdOperarioEmpleado(String idOperarioEmpleado) {
		this.idOperarioEmpleado = idOperarioEmpleado;
		this.setSALIR(true);
	}

	/**
	 * @return the pesoNeto
	 */
	public String getPesoNeto() {
		return pesoNeto;
	}

	/**
	 * @param pesoNeto
	 *            the pesoNeto to set
	 */
	public void setPesoNeto(String pesoNeto) {
		this.pesoNeto = pesoNeto;
		this.setSALIR(true);
	}

	public String getNoLoteReMp() {
		return noLoteReMp;
	}

	public void setNoLoteReMp(String noLoteReMp) {
		this.noLoteReMp = noLoteReMp;
		this.setSALIR(true);
	}

	public String getProveedores() {
		return proveedores;
	}

	public void setProveedores(String proveedores) {
		this.proveedores = proveedores;
	}

	public String getMateriaPrima() {
		return materiaPrima;
	}

	public void setMateriaPrima(String materiaPrima) {
		this.materiaPrima = materiaPrima;
	}

	public String getRefCanastillas() {
		return refCanastillas;
	}

	public void setRefCanastillas(String refCanastillas) {
		this.refCanastillas = refCanastillas;
	}

	public String getNivelMaduracion() {
		return nivelMaduracion;
	}

	public void setNivelMaduracion(String nivelMaduracion) {
		this.nivelMaduracion = nivelMaduracion;
		this.setSALIR(true);
	}

	public String getObsRecepcionMp() {
		return obsRecepcionMp;
	}

	public void setObsRecepcionMp(String obsRecepcionMp) {
		this.obsRecepcionMp = obsRecepcionMp;
		this.setSALIR(true);
	}

	public String getEstadoPqNo() {
		return estadoPqNo;
	}

	public void setEstadoPqNo(String estadoPqNo) {
		this.estadoPqNo = estadoPqNo;
		this.setSALIR(true);
	}

	public String getTiempoUsuario() {
		return tiempoUsuario;
	}

	public void setTiempoUsuario(String tiempo) {
		this.tiempoUsuario = tiempo;
		this.setSALIR(true);
	}

	public String getFechaUsuario() {
		return fechaUsuario;
	}

	public void setFechaUsuario(String fecha) {
		this.fechaUsuario = fecha;
		this.setSALIR(true);
	}

	public String getPesoTotal() {
		return pesoTotal;
	}

	public void setPesoTotal(String pesoTotal) {
		this.pesoTotal = pesoTotal;
		this.setSALIR(true);
	}

	public String getNumCanastilla() {
		return numCanastilla;
	}

	public boolean isEstadoMp() {
		return estadoMp;
	}

	public void setEstadoMp(boolean estadoMp) {
		this.estadoMp = estadoMp;
		this.setSALIR(true);
	}

	public void setNumCanastilla(String numCanastilla) {
		this.numCanastilla = numCanastilla;
		this.setSALIR(true);
	}

	public boolean isResiduosQuimicos() {
		return residuosQuimicos;
	}

	public void setResiduosQuimicos(boolean residuosQuimicos) {
		this.residuosQuimicos = residuosQuimicos;
		this.setSALIR(true);
	}

	public String getNumFactura() {
		return numFactura;
	}

	public void setNumFactura(String numFactura) {
		this.numFactura = numFactura;
		this.setSALIR(true);
	}

	public String getTipoEmpaque() {
		return tipoEmpaque;
	}

	public void setTipoEmpaque(String tipoEmpaque) {
		this.tipoEmpaque = tipoEmpaque;
		this.setSALIR(true);
	}

	public String getOtroTipoEmpaq() {
		return otroTipoEmpaq;
	}

	public void setOtroTipoEmpaq(String otroTipoEmpaq) {
		this.otroTipoEmpaq = otroTipoEmpaq;
		this.setSALIR(true);
	}

	public String getObsResiduosQuimicos() {
		return obsResiduosQuimicos;
	}

	public void setObsResiduosQuimicos(String obsResiduosQuimicos) {
		this.obsResiduosQuimicos = obsResiduosQuimicos;
		this.setSALIR(true);
	}

	public String getIdEmpleado() {
		return idEmpleado;
	}

	public void setIdEmpleado(String idEmpleado) {
		this.idEmpleado = idEmpleado;
		this.setSALIR(true);
	}

	public String getPasswEmpleado() {
		return passwEmpleado;
	}

	public void setPasswEmpleado(String passwEmpleado) {
		this.passwEmpleado = passwEmpleado;
		this.setSALIR(true);
	}

	public String getFechaSistema() {
		return fechaSistema;
	}

	public void setFechaSistema(String fechaSistema) {
		this.fechaSistema = fechaSistema;
		this.setSALIR(true);
	}

	public String getTiempoSistema() {
		return tiempoSistema;
	}

	public void setTiempoSistema(String tiempoSistema) {
		this.tiempoSistema = tiempoSistema;
		this.setSALIR(true);
	}

	/* onCreate */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_recepcion_mp);

		etNoFactura = (EditText) findViewById(R.id.etNoFactura);
		etPesoMP = (EditText) findViewById(R.id.etPesoMP);
		etNumCanastillas = (EditText) findViewById(R.id.etNumCanastillas);
		etEmpaqOtro = (EditText) findViewById(R.id.etEmpaqOtro);
		etJustPqNo = (EditText) findViewById(R.id.etJustPqNo);
		etCualesResiduos = (EditText) findViewById(R.id.etCualesResiduos);
		etNoLoteReMp = (EditText) findViewById(R.id.etNoLoteReMp);
		etObsRegMP = (EditText) findViewById(R.id.etObsRegMP);
		tvrResultado = (TextView) findViewById(R.id.tvrResultado);
		tvrResultadoKg = (TextView) findViewById(R.id.tvrResultadoKg);
		rbEstadoSi = (RadioButton) findViewById(R.id.rbEstadoSi);
		rbEstadoNo = (RadioButton) findViewById(R.id.rbEstadoNo);
		rbEmpaqCanastilla = (RadioButton) findViewById(R.id.rbEmpaqCanastilla);
		rbEmpaqEstopa = (RadioButton) findViewById(R.id.rbEmpaqEstopa);
		rbEmpaqOtro = (RadioButton) findViewById(R.id.rbEmpaqOtro);
		rbNivel1 = (RadioButton) findViewById(R.id.rbNivel1);
		rbNivel2 = (RadioButton) findViewById(R.id.rbNivel2);
		rbNivel3 = (RadioButton) findViewById(R.id.rbNivel3);
		rbNivel4 = (RadioButton) findViewById(R.id.rbNivel4);
		rbResiduosSi = (RadioButton) findViewById(R.id.rbResiduosSi);
		rbResiduosNo = (RadioButton) findViewById(R.id.rbResiduosNo);
		spiRefCanastilla = (Spinner) findViewById(R.id.spiRefCanastilla);
		spiMP = (Spinner) findViewById(R.id.spiMP);
		spiProveedor = (Spinner) findViewById(R.id.spiProveedor);
		manejador = new ManejadorCampos();
		manejadorMensajes = new handlerAlertMessage();
		activity = this;
		this.refCanastilla();
		getWindow().setSoftInputMode(
				WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

	}

	@Override
	protected void onStart() {
		super.onStart();
		GetIpAddress direccion = new GetIpAddress(this);

		if (direccion.getDireccion() != null) {
			URL_PROVEEDORES = direccion.getDireccion() + "/proveedores.json";
			URL_MATERIAS_PRIMAS = direccion.getDireccion()
					+ "/materias_primas.json";
			URL_RECEPCION_MP = direccion.getDireccion()
					+ "/recepciones_mp.json";
			URL_VALIDAR_USUARIO = direccion.getDireccion() + "/validar.json";
			final ProgressDialog pd = ProgressDialog.show(this, null,
					this.getString(R.string.PbMsjCargando), true, true);

			// crear un nuevo hilo
			new Thread(new Runnable() {
				@Override
				public void run() {
					listaProveedor(URL_PROVEEDORES);

				}
			}).start();

			// crear un nuevo hilo
			new Thread(new Runnable() {
				@Override
				public void run() {
					materiaPrima(URL_MATERIAS_PRIMAS);

					pd.dismiss();

				}
			}).start();
		} else {
			new AlertDialog.Builder(this)
					.setIcon(android.R.drawable.ic_dialog_alert)
					.setTitle(R.string.tituloAlerta)
					.setMessage(R.string.msjErSinDireccion)
					.setPositiveButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {// un
								// listener que al pulsar, cierre la
								// aplicacion
								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									// Salir
									Intent intent = new Intent();
									intent.setClass(activity, Etapas.class);
									startActivity(intent);
								}
							}).show();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.layout_recepcion_mp, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle item selection
		switch (item.getItemId()) {
		case R.id.menu_settings:
			if (this.salir()) {

				new AlertDialog.Builder(this)
						.setIcon(android.R.drawable.ic_dialog_alert)
						.setTitle(R.string.tituloAlerta)
						.setMessage(R.string.msjPregunta)
						.setNegativeButton(R.string.btnNo, null)// sin listener
						.setPositiveButton(R.string.btnSi,
								new DialogInterface.OnClickListener() {// un
									// listener que al pulsar, cierre la
									// aplicacion
									@Override
									public void onClick(DialogInterface dialog,
											int which) {
										// Salir
										Intent intent = new Intent();
										intent.setClass(activity, Etapas.class);
										startActivity(intent);
									}
								}).show();

				return true;
			} else {
				Intent intent = new Intent();
				intent.setClass(this, Etapas.class);
				startActivity(intent);
			}
		default:
			return super.onOptionsItemSelected(item);
		}
	}

	@SuppressWarnings("deprecation")
	public void showDate(View v) {
		final Calendar c = Calendar.getInstance();
		fAno = c.get(Calendar.YEAR);
		fMes = c.get(Calendar.MONTH);
		fDia = c.get(Calendar.DAY_OF_MONTH);
		showDialog(DATE_DIALOG_ID);
	}

	@SuppressWarnings("deprecation")
	public void showTime(View v) {
		final Calendar c = Calendar.getInstance();
		hHora = c.get(Calendar.HOUR_OF_DAY);
		hMinuto = c.get(Calendar.MINUTE);
		showDialog(TIME_DIALOG_ID);

	}

	@SuppressLint("SimpleDateFormat")
	private TimePickerDialog.OnTimeSetListener showtime = new TimePickerDialog.OnTimeSetListener() {

		@SuppressLint("SimpleDateFormat")
		@Override
		public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
			hHora = hourOfDay;
			hMinuto = minute;

			Context context = getApplicationContext();
			CharSequence text = new StringBuilder().append(hHora).append(":")
					.append(hMinuto);
			int duration = Toast.LENGTH_SHORT;

			Toast toast = Toast.makeText(context, text, duration);
			toast.show();

			formatoTiempo = new SimpleDateFormat("hh:mm");
			time = (hHora + ":" + hMinuto).toString();

			setTiempoUsuario(time);

		}
	};

	private DatePickerDialog.OnDateSetListener showdate = new DatePickerDialog.OnDateSetListener() {

		@SuppressLint("SimpleDateFormat")
		@Override
		public void onDateSet(DatePicker view, int year, int monthOfYear,
				int dayOfMonth) {
			fAno = year;
			fMes = monthOfYear + 1;
			fDia = dayOfMonth;

			Context context = getApplicationContext();
			CharSequence text = new StringBuilder().append(fDia).append("-")
					.append(fMes).append("-").append(fAno);
			int duration = Toast.LENGTH_SHORT;

			Toast toast = Toast.makeText(context, text, duration);
			toast.show();

			formatoFecha = new SimpleDateFormat("dd-MM-yyyy");
			date = (fDia + "-" + fMes + "-" + fAno + "-").toString();

			setFechaUsuario(date);

		}
	};

	@Override
	protected Dialog onCreateDialog(int id) {
		switch (id) {
		case TIME_DIALOG_ID:
			return new TimePickerDialog(this, showtime, hHora, hMinuto, true);

		case DATE_DIALOG_ID:
			return new DatePickerDialog(this, showdate, fAno, fMes, fDia);
		}
		return null;
	}

	// metodo de radiobutton estado
	public void ifEstado(View v) {
		// Is the button now checked?
		boolean checked = ((RadioButton) v).isChecked();

		// Check which radio button was clicked

		switch (v.getId()) {
		case R.id.rbEstadoSi:
			if (checked) {

				this.setEstadoMp(true); // envia el valor de estado "si" a la
										// variable

				if (this.isEstadoMp()) {

					etJustPqNo.setText(STRING_EMPTY); // limpia el campo
					this.setEstadoPqNo(STRING_EMPTY); // envia el valor vacio a
														// la variable

				}
				etJustPqNo.setEnabled(false);

			}
			break;
		case R.id.rbEstadoNo:
			if (checked) {

				this.setEstadoMp(false);
				etJustPqNo.setEnabled(true);
				etJustPqNo.requestFocus();
				getWindow().setSoftInputMode(
						WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
			}
			break;

		}
	}

	// metodo de radiobutton tipo empaque
	public void TipoEmpaq(View v) {
		// Is the button now checked?
		boolean checked = ((RadioButton) v).isChecked();

		// Check which radio button was clicked

		switch (v.getId()) {
		case R.id.rbEmpaqCanastilla:
			if (checked) {
				etEmpaqOtro.setEnabled(false);
				this.setTipoEmpaque(getString(R.string.rbEmpaqCanastilla));
				etEmpaqOtro.setText(STRING_EMPTY);
			}
			break;
		case R.id.rbEmpaqEstopa:
			if (checked) {
				etEmpaqOtro.setEnabled(false);
				this.setTipoEmpaque(getString(R.string.rbEmpaqEstopa));
				etEmpaqOtro.setText(STRING_EMPTY);

			}
			break;

		case R.id.rbEmpaqOtro:
			if (checked) {
				etEmpaqOtro.setEnabled(true);
				etEmpaqOtro.requestFocus();
				getWindow().setSoftInputMode(
						WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
				this.setTipoEmpaque(getString(R.string.rbEmpaqOtro));

			}
			break;

		}
	}

	// metodo de radiobutton nivel maduracion
	public void ifNivel(View v) {
		// Is the button now checked?
		boolean checked = ((RadioButton) v).isChecked();

		// Check which radio button was clicked

		switch (v.getId()) {
		case R.id.rbNivel1:
			if (checked) {
				this.setNivelMaduracion(getString(R.string.rbNivel1));
			}
			break;
		case R.id.rbNivel2:
			if (checked) {

				this.setNivelMaduracion(getString(R.string.rbNivel2));

			}
			break;

		case R.id.rbNivel3:
			if (checked) {
				this.setNivelMaduracion(getString(R.string.rbNivel3));
			}
			break;
		case R.id.rbNivel4:
			if (checked) {
				this.setNivelMaduracion(getString(R.string.rbNivel4));
			}
			break;

		}
	}

	// metodo de radiobutton estado
	public void ifResiduos(View v) {
		// Is the button now checked?
		boolean checked = ((RadioButton) v).isChecked();

		// Check which radio button was clicked

		switch (v.getId()) {
		case R.id.rbResiduosSi:
			if (checked) {

				etCualesResiduos.setEnabled(true);
				this.setResiduosQuimicos(true);

				etCualesResiduos.requestFocus();
				getWindow().setSoftInputMode(
						WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

			}
			break;
		case R.id.rbResiduosNo:
			if (checked) {
				this.setResiduosQuimicos(false);
				etCualesResiduos.setText(STRING_EMPTY);
				etCualesResiduos.setEnabled(false);

			}
			break;

		}
	}

	/* Spinner de proveedores */
	public void listaProveedor(String url) {

		proveedoresId = new HashMap<String, Integer>();
		try {

			JSONObject Provee = new JSONObject();
			JSONArray proveedores = JsonHelper.getJsonArrayFromUrl(url);

			final ArrayAdapter<String> Lista_Proveedores = new ArrayAdapter<String>(
					this, android.R.layout.simple_spinner_item);

			for (int j = 0; j < proveedores.length(); j++) {
				Provee = proveedores.getJSONObject(j);
				Lista_Proveedores.add(Provee.getString("nombre"));
				proveedoresId.put(Provee.getString("nombre"),
						Integer.parseInt(Provee.getString("id")));

			}
			//
			runOnUiThread(new Runnable() {
				public void run() {
					Lista_Proveedores
							.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
					spiProveedor.setAdapter(Lista_Proveedores);
				}
			});

		} catch (Exception e) {
			/*
			 * hilo que muestra el mensaje de error de conexion al cargar los
			 * datos
			 */
			runOnUiThread(new Runnable() {
				public void run() {

					AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
							activity);
					mensajeEmergente.setTitle(R.string.tituloError);
					mensajeEmergente.setMessage(R.string.msjERConexionCargar);
					mensajeEmergente.setNeutralButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {

								public void onClick(DialogInterface dialog,
										int which) {
									RecepcionMp.this.finish();

								}
							});

					mensajeEmergente.create();
					mensajeEmergente.show();
				}
			});
		}

	}

	/* Spinner de materia prima */
	public void materiaPrima(String url) {

		MpId = new HashMap<String, Integer>();
		try {

			JSONObject mp = new JSONObject();
			JSONArray materiasPrimas = JsonHelper.getJsonArrayFromUrl(url);

			final ArrayAdapter<String> Lista_materias_primas = new ArrayAdapter<String>(
					this, android.R.layout.simple_spinner_item);

			for (int j = 0; j < materiasPrimas.length(); j++) {
				mp = materiasPrimas.getJSONObject(j);
				Lista_materias_primas.add(mp.getString("nombre"));
				MpId.put(mp.getString("nombre"),
						Integer.parseInt(mp.getString("id")));

			}

			runOnUiThread(new Runnable() {
				public void run() {
					Lista_materias_primas
							.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
					spiMP.setAdapter(Lista_materias_primas);
				}
			});

		} catch (Exception e) {
			/*
			 * hilo que muestra el mensaje de error de conexion al cargar los
			 * datos
			 */
			runOnUiThread(new Runnable() {
				public void run() {

					AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
							activity);
					mensajeEmergente.setTitle(R.string.tituloError);
					mensajeEmergente.setMessage(R.string.msjERConexionCargar);
					mensajeEmergente.setNeutralButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {

								public void onClick(DialogInterface dialog,
										int which) {
									RecepcionMp.this.finish();

								}
							});

					mensajeEmergente.create();
					mensajeEmergente.show();
				}
			});
		}

	}

	/* Spinner de referencia canastilla */
	public void refCanastilla() {
		ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
				this, R.array.ref_canastillas,
				android.R.layout.simple_spinner_item);
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		spiRefCanastilla.setAdapter(adapter);

	}

	public void calcularPeso(View v) {
		int peso = manejador.validarPeso(etPesoMP);
		int canastillas = manejador.numCanastillas(etNumCanastillas);

		if (peso != 0) {

			switch (peso) {

			case 2:
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.msjPesoVacio,
						R.string.btnAceptar);
				break;
			case 3:
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.espacios,
						R.string.btnAceptar);
				break;
			case 4:
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.carEspecialPeso,
						R.string.btnAceptar);
				break;
			}
		} else {
			if (canastillas != 0) {

				switch (canastillas) {
				case 5:
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloAlerta, R.string.msjCanasVacio,
							R.string.btnAceptar);
					break;
				case 6:
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloAlerta, R.string.espCanas,
							R.string.btnAceptar);
					break;
				case 7:
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloAlerta, R.string.carEspecialCanas,
							R.string.btnAceptar);
					break;
				}
			} else {

				this.setRefCanastillas(spiRefCanastilla.getSelectedItem()
						.toString());
				this.setPesoTotal(etPesoMP.getText().toString());
				this.setNumCanastilla(etNumCanastillas.getText().toString());
				String porKg = null;

				if (this.getRefCanastillas().equals(
						getString(R.string.ref_canastillas1))) {
					BigDecimal numcanastilla = new BigDecimal(
							this.getNumCanastilla());
					BigDecimal pesototal = new BigDecimal(this.getPesoTotal());
					BigDecimal REF_CANASTILLA1_2 = new BigDecimal(
							String.valueOf(REF_CANASTILLA1));
					String result = String.valueOf(numcanastilla
							.multiply(REF_CANASTILLA1_2));
					BigDecimal multi = new BigDecimal(result);
					BigDecimal porkg = new BigDecimal("1000");
					porKg = String.valueOf((pesototal.subtract(multi)
							.divide(porkg)));
					String total = String.valueOf(pesototal.subtract(multi));

					this.setPesoNeto(total);

				}
				if (this.getRefCanastillas().equals(
						getString(R.string.ref_canastillas2))) {
					BigDecimal numcanastilla = new BigDecimal(
							this.getNumCanastilla());
					BigDecimal pesototal = new BigDecimal(this.getPesoTotal());
					BigDecimal REF_CANASTILLA1_2 = new BigDecimal(
							String.valueOf(REF_CANASTILLA2));
					String result = String.valueOf(numcanastilla
							.multiply(REF_CANASTILLA1_2));
					BigDecimal multi = new BigDecimal(result);
					BigDecimal porkg = new BigDecimal("1000");
					String total = String.valueOf(pesototal.subtract(multi));
					porKg = String.valueOf((pesototal.subtract(multi)
							.divide(porkg)));
					this.setPesoNeto(total);
				}

				if (this.getRefCanastillas().equals(
						getString(R.string.ref_canastillas3))) {
					BigDecimal numcanastilla = new BigDecimal(
							this.getNumCanastilla());
					BigDecimal pesototal = new BigDecimal(this.getPesoTotal());
					BigDecimal REF_CANASTILLA1_2 = new BigDecimal(
							String.valueOf(REF_CANASTILLA3));
					String result = String.valueOf(numcanastilla
							.multiply(REF_CANASTILLA1_2));
					BigDecimal multi = new BigDecimal(result);
					BigDecimal porkg = new BigDecimal("1000");
					porKg = String.valueOf((pesototal.subtract(multi)
							.divide(porkg)));
					String total = String.valueOf(pesototal.subtract(multi));
					this.setPesoNeto(total);
				}

				pesocalculado = new StringBuilder()
						.append(getString(R.string.calculoPeso))
						.append(this.getPesoNeto())
						.append(getString(R.string.enGramos));
				tvrResultado.setText(pesocalculado);

				pesocalculadoKg = new StringBuilder()
						.append(getString(R.string.calculoPeso)).append(porKg)
						.append(getString(R.string.enKilos));
				tvrResultadoKg.setText(pesocalculadoKg);

			}
		}
	}

	// metodo que captura la fecha y la hora del sistema
	@SuppressLint("SimpleDateFormat")
	public void fechaHoraSistema() {
		final Calendar c = Calendar.getInstance();
		int ano = c.get(Calendar.YEAR);
		int mes = c.get(Calendar.MONTH) + 1;
		int dia = c.get(Calendar.DAY_OF_MONTH);
		int hora = c.get(Calendar.HOUR_OF_DAY);
		int minuto = c.get(Calendar.MINUTE);
		String date = (dia + "-" + mes + "-" + ano + "-").toString();
		String time = (hora + ":" + minuto).toString();
		this.setFechaSistema(date);
		this.setTiempoSistema(time);

	}

	/*
	 * metodo que crear una ventana emergente para registrar el codigo y
	 * contrasena
	 */
	public void mensajeRegistro() {

		AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(this);
		LayoutInflater inflater = this.getLayoutInflater();
		final View Inflator = inflater
				.inflate(R.layout.registro_empleado, null);
		final EditText ed1 = (EditText) Inflator
				.findViewById(R.id.etIdeEmpleado);
		final EditText ed2 = (EditText) Inflator
				.findViewById(R.id.etPasswEmpleado);
		mensajeEmergente.setTitle(R.string.msjValidarRegistro);
		mensajeEmergente.setView(Inflator);
		mensajeEmergente.setPositiveButton(R.string.btnRegistrar,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						setIdEmpleado(ed1.getText().toString());
						setPasswEmpleado(ed2.getText().toString());

						if (!self.getIdEmpleado().equals(STRING_EMPTY)
								&& !self.getPasswEmpleado()
										.equals(STRING_EMPTY)) {

							progressDialog = new ProgressDialog(self);
							progressDialog.setMessage(self
									.getString(R.string.PbMsjEnviando));
							progressDialog.setCancelable(true);
							progressDialog.show();

							new Thread(new Runnable() {
								@Override
								public void run() {
									validarUsuario();
									Log.e("RecepcionMp",
											"entra validar usuario");

								}
							}).start();

						} else {
							manejadorMensajes.alertMessageOneButton(activity,
									R.string.tituloAlerta,
									R.string.msjIdPasswInvali,
									R.string.btnAceptar);

						}
					}
				});

		mensajeEmergente.setNegativeButton(R.string.btnCancelar,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {

					}
				});
		mensajeEmergente.create();
		mensajeEmergente.show();

	}

	// metodo que llama el evento del boton registrar
	public void registrarReMaPri(View v) {
		this.validar();

	}

	// metodo que valida si todo el registro esta completo
	public void validar() {
		this.fechaHoraSistema();

		int factura = manejador.validarFactura(etNoFactura);
		if (factura == 0) {
			this.setNumFactura(etNoFactura.getText().toString());
		} else {
			switch (factura) {

			case 1:
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.carEspecialFact,
						R.string.btnAceptar);
				break;
			}
		}

		if (this.getFechaSistema() != null && this.getTiempoSistema() != null) {
			if (this.getFechaUsuario() != null) {
				if (this.getTiempoUsuario() != null) {
					double pesoNeto = Double.parseDouble(this.getPesoNeto());
					int Peso_Neto = (int) pesoNeto;
					if (Peso_Neto > 0) {
						if (rbEstadoSi.isChecked() || rbEstadoNo.isChecked()) {
							if (factura == 0) {

								if (rbEmpaqCanastilla.isChecked()
										|| rbEmpaqEstopa.isChecked()
										|| rbEmpaqOtro.isChecked()) {
									if (rbNivel1.isChecked()
											|| rbNivel2.isChecked()
											|| rbNivel3.isChecked()
											|| rbNivel4.isChecked()) {
										if (rbResiduosSi.isChecked()
												|| rbResiduosNo.isChecked()) {

											this.setProveedores(spiProveedor
													.getSelectedItem()
													.toString());
											this.setMateriaPrima(spiMP
													.getSelectedItem()
													.toString());

											if (!this.etNoLoteReMp.getText()
													.equals(STRING_EMPTY)) {

												String NoLoteReMp = this.etNoLoteReMp
														.getText().toString();
												NoLoteReMp = this.validarcampos
														.DeleteAccents(NoLoteReMp);

												this.setNoLoteReMp(NoLoteReMp);
											}
											if (!this.etJustPqNo.getText()
													.equals(STRING_EMPTY)) {

												String JustPqNo = this.etJustPqNo
														.getText().toString();
												JustPqNo = this.validarcampos
														.DeleteAccents(JustPqNo);

												this.setEstadoPqNo(JustPqNo);
											}
											if (!this.etEmpaqOtro.getText()
													.equals(STRING_EMPTY)) {

												String EmpaqOtro = this.etEmpaqOtro
														.getText().toString();
												EmpaqOtro = this.validarcampos
														.DeleteAccents(EmpaqOtro);

												this.setOtroTipoEmpaq(EmpaqOtro);
											}
											if (!this.etCualesResiduos
													.getText().equals(
															STRING_EMPTY)) {

												String CualesResiduos = this.etCualesResiduos
														.getText().toString();
												CualesResiduos = this.validarcampos
														.DeleteAccents(CualesResiduos);

												this.setObsResiduosQuimicos(CualesResiduos);
											}
											if (!this.etObsRegMP.getText()
													.equals(STRING_EMPTY)) {

												String observaciones = this.etObsRegMP
														.getText().toString();
												observaciones = this.validarcampos
														.DeleteAccents(observaciones);
												this.setObsRecepcionMp(observaciones);

												Log.i("Recepcion", this
														.getObsRecepcionMp());

											}
											this.mensajeRegistro();

										} else {// mensaje seleccione si existen
												// residuos quimicos
											manejadorMensajes
													.alertMessageOneButton(
															activity,
															R.string.tituloAlerta,
															R.string.msjSelecResQuim,
															R.string.btnAceptar);
										}

									} else {// seleccione el nivel de maduracion
										manejadorMensajes
												.alertMessageOneButton(
														activity,
														R.string.tituloAlerta,
														R.string.msjNivelMadurac,
														R.string.btnAceptar);
									}

								} else {// debe seleccionar el tipo de empaque
									manejadorMensajes.alertMessageOneButton(
											activity, R.string.tituloAlerta,
											R.string.msjTipoEmpaque,
											R.string.btnAceptar);
								}
							}

						} else {// mensaje debe seleccionar el estado bueno o
								// malo
							manejadorMensajes.alertMessageOneButton(activity,
									R.string.tituloAlerta,
									R.string.msjEstMatPrima,
									R.string.btnAceptar);
						}

					} else {// mensaje debe calcular el peso neto de la materia
							// prima
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.tituloAlerta,
								R.string.msjCalcularPeso, R.string.btnAceptar);
					}

				} else {// hace falta seleccionar el tiempo
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloAlerta, R.string.msjSelecHora,
							R.string.btnAceptar);
				}

			} else {// hace falta seleccionar la fecha
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.msjSelecFecha,
						R.string.btnAceptar);
			}

		}

	}

	// valida si los campos de usuario estan vacios
	public void validarUsuario() {

		String ced = this.getIdEmpleado();
		String pass = this.getPasswEmpleado();

		HttpClient httpClient = new DefaultHttpClient();
		HttpPost post = new HttpPost(URL_VALIDAR_USUARIO);// operarios
		post.setHeader("content-type", "application/json");

		try {

			// Construimos el objeto en formato JSON
			JSONObject dato = new JSONObject();
			dato.put("cedula", ced);// cedula del operario
			dato.put("password", pass);// contrasena del operario
			dato.put("formulario", "f_recepcion_mp");// permisos

			StringEntity entity = new StringEntity(dato.toString());
			post.setEntity(entity);
			HttpResponse resp = httpClient.execute(post);
			this.setIdOperarioEmpleado(EntityUtils.toString(resp.getEntity()));

			if (this.getIdOperarioEmpleado().equals(CNV)) {
				runOnUiThread(new Runnable() {
					public void run() {

						progressDialog.dismiss();
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.tituloAlerta,
								R.string.msjCedulaIncorrecta,
								R.string.btnAceptar);

					}
				});

			} else {
				if (this.getIdOperarioEmpleado().equals(PNV)) {
					runOnUiThread(new Runnable() {
						public void run() {
							progressDialog.dismiss();
							manejadorMensajes.alertMessageOneButton(activity,
									R.string.tituloAlerta,
									R.string.msjPasswordIncorrecta,
									R.string.btnAceptar);

						}
					});

				} else {

					if (this.getIdOperarioEmpleado().equals(no_permiso)) {
						runOnUiThread(new Runnable() {
							public void run() {
								progressDialog.dismiss();
								manejadorMensajes.alertMessageOneButton(
										activity, R.string.tituloAlerta,
										R.string.msjSinPermisos,
										R.string.btnAceptar);

							}
						});
					} else {

						new Thread(new Runnable() {
							@Override
							public void run() {
								self.envioBaseDatos();
								Log.e("RecepcionMp", "entra envio basedatos");

							}
						}).start();
					}

				}

			}

			Log.e("RecepcionMp", "Entra a validar el usuario");

		} catch (Exception ex) {
			/*
			 * hilo que muestra el mensaje de error de conexion al cargar los
			 * datos
			 */
			runOnUiThread(new Runnable() {
				public void run() {

					progressDialog.dismiss();
					AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
							activity);
					mensajeEmergente.setTitle(R.string.tituloError);
					mensajeEmergente.setMessage(R.string.msjERConexionCargar);
					mensajeEmergente.setNeutralButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {

								public void onClick(DialogInterface dialog,
										int which) {
									RecepcionMp.this.finish();

								}
							});

					mensajeEmergente.create();
					mensajeEmergente.show();
				}
			});

		}

	}

	// metodo que finaliza el registro de recepcion de mp
	public void finalizarReMaPri(View v) {
		if (this.salir()) {

			new AlertDialog.Builder(this)
					.setIcon(android.R.drawable.ic_dialog_alert)
					.setTitle(R.string.tituloAlerta)
					.setMessage(R.string.msjPregunta)
					.setNegativeButton(R.string.btnNo, null)// sin listener
					.setPositiveButton(R.string.btnSi,
							new DialogInterface.OnClickListener() {// un
								// listener que al pulsar, cierre la
								// aplicacion
								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									// Salir
									Intent intent = new Intent();
									intent.setClass(activity,
											PreProduccion.class);
									startActivity(intent);
								}
							}).show();

		} else {
			Intent intent = new Intent();
			intent.setClass(this, PreProduccion.class);
			startActivity(intent);
		}

	}

	/*
	 * metodo encargado de enviar todos los datos a la base de datos
	 */
	public void envioBaseDatos() {
		HttpClient httpClient = new DefaultHttpClient();
		// URL del servidor para guardar los datos de recepcion_mp
		HttpPost post = new HttpPost(URL_RECEPCION_MP);

		try {
			// Construimos el objeto cliente en formato JSON
			JSONObject dato = new JSONObject();

			// se almacenan los datos capturados por los campos de texto en
			// el objeto JSON para enviarlo al servidor.
			dato.put("empleado_id",
					Integer.parseInt(this.getIdOperarioEmpleado()));
			dato.put("materia_prima_id", MpId.get(this.getMateriaPrima()));
			dato.put("proveedor_id", proveedoresId.get(this.getProveedores()));
			dato.put("no_factura", this.getNumFactura());
			dato.put("peso_mp", this.getPesoNeto());
			dato.put("no_canastillas", this.getNumCanastilla());
			dato.put("estado_mp", this.isEstadoMp());
			dato.put("obs_estado_mp", this.getEstadoPqNo());
			dato.put("tipo_empaque", this.getTipoEmpaque());
			dato.put("otro_tipoempaque", this.getOtroTipoEmpaq());
			dato.put("nivel_maduracion", this.getNivelMaduracion());
			dato.put("fecha_usuario", this.getFechaUsuario());
			dato.put("fecha_sistema", this.getFechaSistema());
			dato.put("hora_usuario", this.getTiempoUsuario());
			dato.put("hora_sistema", this.getTiempoSistema());
			dato.put("numero_de_lote", this.getNoLoteReMp());
			dato.put("obs_recepcion", this.getObsRecepcionMp());
			dato.put("cuales_residuos_quimicos", this.getObsResiduosQuimicos());

			StringEntity entity = new StringEntity(dato.toString());
			post.setHeader("Content-Type", "application/json; chartset=UTF-8");
			post.setHeader("Accept", "application/json");
			post.setEntity(entity);
			HttpResponse resp = httpClient.execute(post);
			final String respStr = EntityUtils.toString(resp.getEntity());
			Log.e("RecepcionMp",
					"envia datos, y esta apunto de esperar respuesta del serv");

			if (respStr.equals("true")) {
				Log.e("RecepcionMp", "el servidor me retorno true");
				this.setIdOperarioEmpleado(null);
				this.setPesoNeto(null);
				this.setNumFactura(null);
				this.setFechaUsuario(null);
				this.setTiempoUsuario(null);
				this.setFechaSistema(null);
				this.setTiempoUsuario(null);
				this.setNumCanastilla(null);
				this.setObsResiduosQuimicos(null);
				this.setObsRecepcionMp(null);
				this.setNoLoteReMp(null);

				Log.e("RecepcionMp", "esta antes del hilo de msj exitoso");
				// mensaje de respuesta del servidor
				runOnUiThread(new Runnable() {
					public void run() {
						progressDialog.dismiss();
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.msjMuyBien,
								R.string.msjRegistroExitoso,
								R.string.btnAceptar);
						Log.e("RecepcionMp",
								"el servidor me retorno true y esta en el mensaje en pantalla");

					}
				});

				this.setSALIR(false);
			} else {
				runOnUiThread(new Runnable() {
					public void run() {

						progressDialog.dismiss();
						AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
								activity);
						mensajeEmergente.setTitle(R.string.tituloError);
						mensajeEmergente.setMessage(respStr);
						mensajeEmergente.setNeutralButton(R.string.btnAceptar,
								new DialogInterface.OnClickListener() {

									public void onClick(DialogInterface dialog,
											int which) {

									}
								});

						mensajeEmergente.create();
						mensajeEmergente.show();
						Log.e("RecepcionMp",
								"el servidor me retorno el mensaje del serv y esta en el mensaje en pantalla");
					}
				});
			}

		} catch (Exception ex) {
			Log.e("RecepcionMp", "me salta al catch");
			progressDialog.dismiss();
			// mensaje de respuesta del servidor
			runOnUiThread(new Runnable() {
				public void run() {
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloError, R.string.msjERConexionEnviar,
							R.string.btnAceptar);

				}
			});

		}

	}

	// metodo que controla el boton atr�s
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {

		if (keyCode == KeyEvent.KEYCODE_BACK) {
			if (this.salir()) {

				new AlertDialog.Builder(this)
						.setIcon(android.R.drawable.ic_dialog_alert)
						.setTitle(R.string.tituloAlerta)
						.setMessage(R.string.msjPregunta)
						.setNegativeButton(R.string.btnNo, null)// sin listener
						.setPositiveButton(R.string.btnSi,
								new DialogInterface.OnClickListener() {// un
									// listener que al pulsar, cierre la
									// aplicacion
									@Override
									public void onClick(DialogInterface dialog,
											int which) {
										// Salir
										RecepcionMp.this.finish();
									}
								}).show();

				// Si el listener devuelve true, significa que el evento esta
				// procesado, y nadie debe hacer nada mas
				return true;
			} else {
				RecepcionMp.this.finish();
			}
		}
		// para las demas cosas, se reenvia el evento al listener habitual
		return super.onKeyDown(keyCode, event);
	}

	/* verifica si no hay ningun dato en memoria ni en campos */
	public boolean salir() {

		if (this.isSALIR()) {
			return true;
		} else {
			return false;
		}

	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);

		outState.putString("date", date);
		outState.putString("time", time);
		outState.putString("numFactura", this.getNumFactura());
		outState.putString("peso_neto", this.getPesoNeto());
		outState.putCharSequence("pesocalculado", pesocalculado);
		outState.putCharSequence("pesocalculadoKg", pesocalculadoKg);
		outState.putString("no_lote", this.getNoLoteReMp());
		outState.putString("estado_pq_no", this.getEstadoPqNo());
		outState.putString("otro_empaque", this.getOtroTipoEmpaq());
		outState.putString("cuales_residuos", this.getObsResiduosQuimicos());
		outState.putString("obs", this.getObsRecepcionMp());

	}

	@SuppressLint("SimpleDateFormat")
	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
		super.onRestoreInstanceState(savedInstanceState);

		date = savedInstanceState.getString("date");
		time = savedInstanceState.getString("time");
		this.setFechaUsuario(date);
		this.setTiempoUsuario(time);

		this.setNumFactura(savedInstanceState.getString("numFactura"));
		this.setPesoNeto(savedInstanceState.getString("peso_neto"));
		this.pesocalculado = savedInstanceState
				.getCharSequence("pesocalculado");
		this.pesocalculadoKg = savedInstanceState
				.getCharSequence("pesocalculadoKg");
		tvrResultado.setText(pesocalculado);
		tvrResultadoKg.setText(pesocalculadoKg);
		this.setNoLoteReMp(savedInstanceState.getString("no_lote"));
		this.setEstadoPqNo(savedInstanceState.getString("estado_pq_no"));
		this.setOtroTipoEmpaq(savedInstanceState.getString("otro_empaque"));
		this.setObsResiduosQuimicos(savedInstanceState
				.getString("cuales_residuos"));
		this.setObsRecepcionMp(savedInstanceState.getString("obs"));

	}

}
